[数据][查表][十进制转十六进制]Java基础课程第四天

随手笔记,有空再修饰下文字

十进制转十六进制

第一种:直接遍历
 public static void toHex2(int num)
 { 
  for (int x=0;x<8 ;x++ )
  {
  System.out.print(num & 15);
  num = num >>>4;
  }
 }

第二种:十六进制包含十六个元素,0-9,a-f,所以我们可以定义一个字符串数组,通过计算&15后所对应的值用遍历打印出来
 public static void toHex2(int num)
 { 
  char [] chs={'0','1','2','3','4','5',
        '6','7','8','9','a','b',
        'c','d','e','f'};//定义数组,因为数组与角标的对等关系,所以可以通过计算&15后的值之间取出与之对应的字符串内容

  for (int x=0;x<8 ;x++ )//最多8次循环
  {
  int temp = num & 15;//定义一个临时变量,存储当前&15的值
   System.out.print(chs[temp]);//打印出计算后的值所对应数组里的元素
  num = num >>>4;
  }
 }
第三种:定义一个arr数组用来存储已转成字符数组的数据,并通过遍历打印出来
 public static void toHex2(int num)
 { 
  char [] chs={'0','1','2','3','4','5',
     '6','7','8','9','a','b',
     'c','d','e','f'};
  char [] arr=new char [8];//定义一个arr数组用于存储计算后的值
  // 0 0 0 0 0 0 0 0 0
  for(int x=0;x<8;x++)
  {
   int temp = num & 15;//把计算的值存入数组arr
   arr[x]=chs[temp];
   num = num>>>4;
  }
  
  for (int x=0;x<arr.length;x++ )
  {
   System.out.print(arr[x]);
  }
第四步:继续优化,因为所打印出来的结果是反的,所以可以通过倒着打印来实现效果
 public static void toHex2(int num)
 { 
  char [] chs={'0','1','2','3','4','5',
     '6','7','8','9','a','b',
     'c','d','e','f'};
  char [] arr=new char [8];//定义一个arr数组用于存储计算后的值
  // 0 0 0 0 0 0 0 0 0
  for(int x=0;x<8;x++)
  {
   int temp = num & 15;//把计算的值存入数组arr
   arr[x]=chs[temp];
   num = num>>>4;
  }
  
  for (int x=arr.length-1;x>=0;x--)
  {
   System.out.print(arr[x]);
  }

 }
第五步:发现会打印一些多出的0,有没有一种方法可以只打印出需要计算的值呢?
 0000 0000 0000 0000 0000 0000 0011 1100   (num)->60
&0000 0000 0000 0000 0000 0000 0000 1111   ->&15
------------------------------------------------
 0000 0000 0000 0000 0000 0000 0000 1100  (temp)->12->c


 0000 0000 0000 0000 0000 0000 0000 0011 | (num)1100 >>>4 右移四位继续&15
&0000 0000 0000 0000 0000 0000 0000 1111   ->&15
------------------------------------------------
 0000 0000 0000 0000 0000 0000 0000 0011   (temp)->3

 因为与0 &计算都为0,所以之前打印出的0对我们并没有用,也就是无效,那么可以定一个判断条件
 就是我们只需要计算有效位并打印出来即可。所以只要计算后的数的值(num)不为0,我们就循环计算,直到计算到0,则停止
 
public static void toHex2(int num)
 { 
  char [] chs={'0','1','2','3','4','5',
        '6','7','8','9','a','b',
        'c','d','e','f'};
  char [] arr=new char [8];//定义一个arr数组用于存储计算后的值
  
  int pos =0;//定义一个指针,从0角标开始存储数据
  while (num!=0)
  {
   int temp=num&15;
   arr[pos++]=chs[temp];//每计算一次把值存储到POS对应角标
   num = num >>>4;
  }
  
  for (int x=arr.length-1;x>=0;x--)
  {
   System.out.print(arr[x]+",");
  }

 }
第六步:发现打印的时候,把所有角标打印出来了,而我们只需要有效位的角标,此时2个有效位
  for (int x=arr.length-1;x>=0;x--)
  {
   System.out.print(arr[x]+",");
  }
那我们可以通过POS,只打印我们想要指向的内容
//如果是for(int x=0;x<pos;x++)的话,打印出是c3,因为是从0角标位存储,而数据存储到第二个元素,但角标是1
所以只需要<pos即可,但考虑到需要打印的是3c才符合我们的要求,所以我们继续倒打,但此时pos值是存储到第二个元素,角标是1,所以需要POS-1
简单来说,当判断条件的时候,Pos的意思是数组元素个数,当为初始化值的时候,POS为数组角标
  for (int x=pos-1;x>=0;x--)
  {
   System.out.print(arr[x]+",");
  }
第七步:for循环里,一般不喜欢反过来写,那么有什么办法可以按照正常遍历的方法写出来呢
public static void toHex2(int num)
 { 
  char [] chs={'0','1','2','3','4','5',
       '6','7','8','9','a','b',
       'c','d','e','f'};
  char [] arr=new char [8];//定义一个arr数组用于存储计算后的值
  
  int pos=arr.length-1;//定义一个角标指针,直接指向最后一个角标
  while (num!=0)
  {  
   
   int temp=num&15;
   arr[pos--]=chs[temp];//从最后一个角标开始存
   num = num >>>4;
  }
  
  for(int x=pos+1;x<arr.length;x++)//此时POS指的是最后一个角标,所以我们要从它前一个角标开始打印,POS+1
  {
   System.out.print(arr[x]+",");
  }

 }
第八步:for(int x=pos+1;x<arr.length;x++)pos+1,不容易理解,继续优化,更加美观
 public static void toHex2(int num)
 { 
  char [] chs={'0','1','2','3','4','5',
       '6','7','8','9','a','b',
       'c','d','e','f'};
  char [] arr=new char [8];//定义一个arr数组用于存储计算后的值
  
  int pos=arr.length;//此处定义的是POS值为该数组的元素个数
  while (num!=0)
  {  
   
   int temp=num&15;
   arr[--pos]=chs[temp];//获取计算值前POS-1 变成最后一个指标
   num = num >>>4;
  }
  
  for(int x=pos;x<arr.length;x++)//for (int x=pos-1;x>=0;x--)
  {
   System.out.print(arr[x]+",");
  }

 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值